美文网首页每日打卡
2021-11-23 859 亲密字符串

2021-11-23 859 亲密字符串

作者: 16孙一凡通工 | 来源:发表于2021-11-22 10:10 被阅读0次

    思路的话
    分两种情况:1.当两个字符串相同时,直接确定单个字符串如s上是否有相同的两个字符,这是由于相同的时候单字符串内两个相同字符即可任意交换。
    2.当两个字符串不同时,若超过两个不同字符,直接输出false,寻找不同的两个字符,看是否两字符交换一下相等。

    java版本:

    class Solution {
        public boolean buddyStrings(String s, String goal) {
            if(s.length()!=goal.length()){
                return false;
            }
            if(s==goal){
                System.out.println("???");
                int[] arr=new int[26];
                char[] s_char=s.toCharArray();
                for(char value:s_char){
                    System.out.println(value-'a');
                    if(arr[value-'a']==1){
                    return true;
                    }
                    arr[value-'a']=1;
                }
                return false;
            }           
               int location_i=-1,location_j=-1;
            for(int i=0;i<s.length();i++){
                if(s.charAt(i)!=goal.charAt(i)){
                    if(location_i==-1){
                        location_i=i;
                    }else if (location_j==-1){
                        location_j=i;
                    }else{
                        return false;
                    }
    
                }
            }
            return location_j!=-1 && s.charAt(location_i)==goal.charAt(location_j) && s.charAt(location_j)==goal.charAt(location_i);
        }
    }
    

    Go版本

    import "fmt"
    func buddyStrings(s string, goal string) bool {
    
        if len(s)!=len(goal){
            return false;
        }
        location_i,location_j:=-1,-1
        
    if s == goal {
            seen := [26]bool{}
            // 存在重复的地方可以互相交换
            for _, ch := range s {
                if seen[ch-'a'] {
                    return true
                }
                seen[ch-'a'] = true
            }
            return false
        }
    
        for i:=0;i<len(s);i++{
            if(s[i]!=goal[i] ){
                if location_i==-1{
                    location_i=i;
                }else if location_j==-1{
                    location_j=i;
                }else{
                    return false;
                }
               
            }
            
        }
        return location_j!=-1 && s[location_i]==goal[location_j] && s[location_j]==goal[location_i];
    }
    

    相关文章

      网友评论

        本文标题:2021-11-23 859 亲密字符串

        本文链接:https://www.haomeiwen.com/subject/urfwtrtx.html