小算法


题目

一、给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。

示例 1:

输入:s = “Hello World”
输出:5
示例 2:

输入:s = " fly me to the moon "
输出:4
示例 3:

输入:s = “luffy is still joyboy”
输出:6


题目来源

解法

public class text {
    public int strStr(String haystack) {
        boolean flag=false;
        int result=0;
        char[] array=haystack.toCharArray();
        for(int i=array.length-1;i>=0;i--)
        {
            if(array[i]!=' ')
            {
                flag=true;
               result++;
            }
            if(array[i]==' '&&flag==true)
            {
                break;
            }
        }
        return result;
    }
    public static void main(String[] args) {
        String str="   fly me   to   the moon  ";
        System.out.println(new text().strStr(str));
    }
    }

二.给你一个 m x n 的矩阵 matrix 。如果这个矩阵是托普利茨矩阵,返回 true ;否则,返回 false 。

如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是 托普利茨矩阵 。

示例 1:

输入:matrix = [[1,2,3,4],[5,1,2,3],[9,5,1,2]]
输出:true
解释:
在上述矩阵中, 其对角线为:
“[9]”, “[5, 5]”, “[1, 1, 1]”, “[2, 2, 2]”, “[3, 3]”, “[4]”。
各条对角线上的所有元素均相同, 因此答案是 True 。
示例 2:

输入:matrix = [[1,2],[2,2]]
输出:false
解释:
对角线 “[1, 2]” 上的元素不同。

解法

public class text {

    public  static boolean check_elem(int [][]str,int x,int y ,int a)          //x代表行,y代表列
    {
        boolean flag=true;
        for(int i=0;i<a;i++)            //行遍历
        {
            int j=0;
            int count=str[i][j];
            while(i<x&&j<y)
            {
                if(count!=str[i][j])
                    flag=false;
                i++;
                j++;
            }
        }
        return flag;
    }

    public static boolean check(int [][]str,int x,int y)
    {
      boolean flag= text.check_elem(str,x,y,x);             //遍历行
        flag=text.check_elem(str,y,x,y);
      return flag;
    }

    public static void main(String[] args) {

        //矩阵可手动输入,这里光验证就不搞了
        int x=2,y=2;
        int [][]matrix = new int[][]{{1,2}, {2,2}};
        boolean flag=text.check(matrix,x,y);
        System.out.println(flag);
    }
}

282在这里插入图片描述2*2数组验证正确

三、如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y 两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。

例如,“tars” 和 “rats” 是相似的 (交换 0 与 2 的位置); “rats” 和 “arts” 也是相似的,但是 “star” 不与 “tars”,“rats”,或 “arts” 相似。

总之,它们通过相似性形成了两个关联组:{“tars”, “rats”, “arts”} 和 {“star”}。注意,“tars” 和 “arts” 是在同一组中,即使它们并不相似。形式上,对每个组而言,要确定一个单词在组中,只需要这个词和该组中至少一个单词相似。

给你一个字符串列表 strs。列表中的每个字符串都是 strs 中其它所有字符串的一个字母异位词。请问 strs 中有多少个相似字符串组?

示例 1:

输入:strs = [“tars”,“rats”,“arts”,“star”]
输出:2
示例 2:

输入:strs = [“omv”,“ovm”]
输出:1

public class test_18 {
//    "tars" 和 "rats" 是相似的 (交换 0 与 2 的位置); "rats" 和 "arts" 也是相似的,但是 "star" 不与 "tars","rats",或 "arts" 相似。

    public static boolean test_is_similar(String str1,String str2)
    {
        if(str1==str2) return true;
        boolean flag=true;
        char []temp=str1.toCharArray();           //将string类型转变为char数组类型
        char []temp2=str2.toCharArray();
        int i=0;
        int index=0;
        for(i=0;i<temp.length;i++)
        {
            //System.out.print("第"+i+"个字符");   test的代码
            for(int k=index;k<temp2.length;k++)
            {
                if(temp[i]==temp2[k])
                {
                    index=k;
                    break;
                }

            }
            //System.out.println("相同位置"+index);   test的代码
            if(i==index)
            {
                index++;
                continue;
            }
           if(temp[index]==temp2[i])
           {
             for(int j=0;j<temp.length;j++) {     //判读其他字符是否相等
                 if(j!=i&&j!=index)
                 {
                     if(temp[j]!=temp2[j])
                     {
                         flag=false;
                         return flag;

                     }

                 }
             }
             if(flag=true)
                 return true;

           }
        }
        if(i==temp.length)
        {
            return false;
        }
        return flag;

    }

    public static void main(String[] args) {
        int result=0;
        String []strs=new String[]{"tars","rats","arts","star"};
        for(int i=0;i<strs.length;i++)
        {
            for(int j=i+1;j<strs.length;j++)
            {
                if(test_is_similar(strs[i],strs[j]))
                    result++;
            }

        }
        System.out.println("最后结果是"+result);


    }
}

结果截图:
在写的时候要注意有相同字母的字符串怎么进行类似操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值